<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
            "http://www.w3.org/TR/REC-html40/loose.dtd">
<HTML>
<HEAD>



<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<META name="GENERATOR" content="hevea 1.08">
<LINK rel="stylesheet" type="text/css" href="libman.css">
<TITLE>
Overview
</TITLE>
</HEAD>
<BODY >
<A HREF="libman038.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
<A HREF="libman040.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
<HR>

<H2 CLASS="section"><A NAME="htoc76">7.1</A>&nbsp;&nbsp;Overview</H2>
Propia is the name for the implementation of Generalised Propagation in
ECL<SUP><I>i</I></SUP>PS<SUP><I>e</I></SUP>.<BR>
<BR>
Generalised propagation is <EM>not</EM> restricted
to integer domains, but can be applied to any goal the user cares to specify
even if the variables don't have domains.<BR>
<BR>
Effectively the system looks ahead to determine if 
an approximation to the possible answers has a non-trivial generalization.
It is non-trivial if it enables any variables in the goal to become
further instantiated, thus reducing search. <BR>
<BR>
The background and motivation for Generalised Propagation is given in
references [<A HREF="libman072.html#LeProvost92"><CITE>15</CITE></A><CITE>, </CITE><A HREF="libman072.html#LeProvost92a"><CITE>14</CITE></A><CITE>, </CITE><A HREF="libman072.html#LeProvost93b"><CITE>16</CITE></A>]. This section
focusses on how to use it. Further examples of the use of Propia are
distributed with ECL<SUP><I>i</I></SUP>PS<SUP><I>e</I></SUP>in the <CODE>doc/examples/propia/</CODE> directory
. A simple demonstration of Propia in action on Lewis Carroll's Zebra
problem can be run by compiling <CODE>zebra.pl</CODE> and issuing the query
<CODE>lib(ic), zebra(Houses,ic)</CODE> . An slightly more complex
application of Propia to crossword generation can be run by compiling
<CODE>crossword</CODE>.<BR>
<BR>
<A NAME="@default203"></A>
Using Propia it is easy to take a standard Prolog program and, with
minimal syntactic change, to turn it into a constraint logic program.
Any goal <CODE>Goal</CODE> in the Prolog program, can be transformed into a
constraint by annotating it thus <CODE>Goal infers most</CODE>.
The resulting constraint admits just the same answers as
the original goal, but its behaviour is quite different.
Instead of evaluating the goal by non-deterministically selecting
a clause in its definition and evaluating the clause body, Propia
evaluates the resulting constraint by extracting information from it
deterministically.
Propia extracts as much information as possible from the constraints
before selecting an ordinary Prolog goal and evaluating it. In this
way Propia reduces the number of choices that need to be explored and
thus makes programs more efficient.<BR>
<BR>
<HR>
<A HREF="libman038.html"><IMG SRC ="contents_motif.gif" ALT="Up"></A>
<A HREF="libman040.html"><IMG SRC ="next_motif.gif" ALT="Next"></A>
</BODY>
</HTML>
